// 项目入口

#include <windows.h>
#include "role/RoleOfAdministrator.h" //管理员文件
#include "role/RoleOfManager.h"       //经理文件
#include "role/RoleOfWaiter.h"        //服务员文件
#include "manage/LoginManage.h"         //登录管理文件
#include "util/FileManage.h"          //文件操作
#include "manage/StaffManage.h"         //员工文件

int main()
{
    SetConsoleOutputCP(65001);

    int roleOfUser; // 账户类型 0. 1. 2.
    int uiResult;

    // 定义一个函数指针数组
    int (*functionUi[3])() = {UiOfWaiter, UiOfManager, UiOfAdministrator};

    // 定义一个字符串数组 用于存放文件名
    char staffDBPath[] = "staffInfos.txt";

    ListPointer nodeHead;
    FILE *filePointer;                   // 创建一个文件指针
    filePointer = FileOpen(staffDBPath); // 从文件路径打开文件
    // 读取文件
    nodeHead = FileRead(filePointer, sizeof(struct Staff));
    // 如果文集为空
    if (nodeHead->listNext == NULL)
    {
        // 调用初始化管理员账号信息
        UserLoginInit(filePointer, nodeHead);
    }

    while (1)
    {
        fclose(filePointer); // 关闭文件

        roleOfUser = UserLogin(nodeHead);

        // 读取账户类型
        uiResult = functionUi[roleOfUser]();
        if (uiResult == 1)
        {
            break;
        }
        else
        {
            filePointer = FileOpen(staffDBPath);
            nodeHead = FileRead(filePointer, sizeof(struct Staff));
        }
    }
    
    system("cls");
    printf("\n\n\n\n\t\t\t已退出系统.....\n\n");
    return 0;
}